/**
 * 加密解密工具类
 */
import CryptoJS from 'crypto-js';

let KP = {
    key: '90268d3dc304f5f3', // 秘钥 16*n:
    iv: 'b894f52b46104ab2' // 偏移量
};

// 加密
function getAesString(data, key, iv) {
    key = CryptoJS.enc.Utf8.parse(key);
    iv = CryptoJS.enc.Utf8.parse(iv);
    let encrypted = CryptoJS.AES.encrypt(data, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString(); // 返回的是base64格式的密文
}

// 解密
function getDAesString(encrypted, key, iv) { 
    key = CryptoJS.enc.Utf8.parse(key);
    iv = CryptoJS.enc.Utf8.parse(iv);
    let decrypted = CryptoJS.AES.decrypt(encrypted, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8); //
};

// AES 对称秘钥加密
export const aes = {
    //加密
    en: (data) => getAesString(data, KP.key, KP.iv),
    //解密
    de: (data) => getDAesString(data, KP.key, KP.iv)
};

// BASE64
export const base64 = {
    en: (data) => CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data)),
    de: (data) => CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8)
};

// SHA256
export const sha256 = (data) => {
    return CryptoJS.SHA256(data).toString();
};

// MD5 '12654987' --> 60f6c0f4991073bdb49b56b3d38f2645
export const md5 = (data) => {
    return CryptoJS.MD5(data).toString();
};